package com.tjetc;

public class _20PolymorphicApplication {
    public static void main(String[] args) {
        /*

        多态数组：

          要求创建 1 个 Person 对象、2 个 Student 对象和 2 个 Teacher 对象, 统⼀放在数组中，并调⽤每个对象的say⽅法

          升级：如何调⽤⼦类特有的⽅法， ⽐如 Teacher 有⼀个 teach , Student 有⼀个 study
            思路分析：
            1.输入
                给他一个数组
            2.输出
                每个对象的say的输出内容
            3.处理逻辑
                （1）使用循环遍历数组
                （2）调用每个对象的say方法
         */

        Person[] people = new Person[3];
        people[0] = new Student();
        people[1] = new Teacher();
        people[2] = new Person(); // 这个不是多态

        // 调用每个对象的say方法
        for (int i = 0; i < people.length; i++) {
            people[i].say();
            // 如何调用子类方法
            // 使用判断 向下有风险 需要判断
            if (people[i] instanceof Teacher) {
                Teacher teacher = (Teacher) people[i];
                teacher.teach();
            }else if (people[i] instanceof Student) {
                Student student = (Student) people[i];
                student.study();
            }
        }



    }
}

class Person {
    void say() {
        System.out.println("人说");
    }
}

class Student extends Person {
    @Override
    void say() {
        System.out.println("学生说");
    }

    void study() {
        System.out.println("学生学");
    }
}


class Teacher extends Person {

    void teach() {
        System.out.println("老师教");
    }

    @Override
    void say() {
        System.out.println("老师说");
    }
}
